#!/usr/bin/env python
## Copyright (C) 2010, Scott W. Dunlop <swdunlop@gmail.com>
## All rights reserved.
## 
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions are met:
##    * Redistributions of source code must retain the above copyright
##      notice, this list of conditions and the following disclaimer.
##    * Redistributions in binary form must reproduce the above copyright
##      notice, this list of conditions and the following disclaimer in the
##      documentation and/or other materials provided with the distribution.
##    * Neither the name of the <organization> nor the
##      names of its contributors may be used to endorse or promote products
##      derived from this software without specific prior written permission.
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
## ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
## DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
## (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
## THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


from nospex import *

class DemoNode( NoSpexNode ):
    def handleEnter( self ):
        x,y = self.position
        try:
            x = int( x )
        except ValueError, x:
            x = "NaN"
        
        try:
            y = int( y )
        except ValueError, y:
            y = "NaN"
        
        self.info = "%s, %s" % ( x, y )

    def handleLeave( self ):
        del self.info 
    
    def handleClick( self ):
        self.unlink( )

class DemoBlip( NoSpexBlip ):
    def handleEnter( self ):
        self.info = "Hello, I'm a Blip!" 

    def handleLeave( self ):
        del self.info 

class DemoGraph( NoSpexGraph ):
    def handleClick( self ):
        for link in tuple( self.links ):
            DemoBlip( link, 1000 )
        self.requestBlips( )

class DemoLink( NoSpexLink ):
    pass

import nospex

graph = DemoGraph( )

first = DemoNode( graph )
prev = first
for x in range( 0, 9 ):
    node = DemoNode( graph ) 
    DemoLink( prev, node )
    prev = node
DemoLink( prev, first )

graph.display( )

